// 权限拦截 导航守卫 路由守卫  router
import router from '@/router' // 引入路由实例
import store from '@/store' // 引入vuex store实例
import NProgress from 'nprogress' // 引入一份进度条插件
import 'nprogress/nprogress.css' // 引入进度条样式


const whiteList = ['/login', '/404']

// 路由的前置守卫
router.beforeEach(async function (to, from, next) {
    // debugger
    NProgress.start() //开启进度条

    // 首先判断有无token
     if (store.getters.token) {

        // 如果有token 继续判断是不是去登录页
        if (to.path === '/login') {
            // 表示去的登录页
            next('/')  //跳到主页
     
        } else {

            if (!store.getters.userId) {
                const { roles } = await store.dispatch("user/getUserInfo")
                const routes = await store.dispatch("permission/filterRoutes", roles.menus)
                router.addRoutes([...routes, { path: '*', redirect: '/404', hidden: true }]) // 添加到路由表
                next(to.path)
             }
            next()  //直接放行
        }
     } else {

        // 如果没有token
        if (whiteList.indexOf(to.path) > -1) {
            //如果找到了 表示在名单里面
            next()
             
        } else {
            next('/login') //跳到登录页
        }
    }
    NProgress.done() //手动强制关闭一次  为了解决 手动切换地址时  进度条的不关闭的问题
})
//  后置守卫
router.afterEach(function () {
    NProgress.done() //关闭进度条
})


